
const cd = '012389ABCDEFIJK456789ALMNOPQRUVWXYZ'
import AES from 'crypto-js/aes';
import CryptoJS from 'crypto-js';
export class StringCode {
    //加密字符串
    static toCode(str: string, key?: string) {
        key = key || cd
        if (!str) return ''
        // //定义密钥，36个字母和数字
        // const l = key.length;  //获取密钥的长度
        // const a = key.split("");  //把密钥字符串转换为字符数组
        // let s = "", b, bl, b2, b3;  //定义临时变量
        // for (var i = 0; i < str.length; i++) {  //遍历字符串
        //     b = str.charCodeAt(i);  //逐个提取每个字符，并获取Unicode编码值
        //     bl = b % l;  //求Unicode编码值得余数
        //     b = (b - bl) / l;  //求最大倍数
        //     b2 = b % l;  //求最大倍数的于是
        //     b = (b - b2) / l;  //求最大倍数
        //     b3 = b % l;  //求最大倍数的余数
        //     s += a[b3] + a[b2] + a[bl];  //根据余数值映射到密钥中对应下标位置的字符
        // }
        // return s;  //返回这些映射的字符
        return AES.encrypt(str, key).toString()
    }

    static fromCode(str: string, key?: string) {
        key = key || cd
        if (!str) return ''

        // //定义密钥，36个字母和数字
        // const l = key.length;  //获取密钥的长度
        // let b, bl, b2, b3, d = 0, s;  //定义临时变量
        // s = new Array(Math.floor(str.length / 3));  //计算加密字符串包含的字符数，并定义数组
        // b = s.length;  //获取数组的长度
        // for (var i = 0; i < b; i++) {  //以数组的长度循环次数，遍历加密字符串
        //     bl = key.indexOf(str.charAt(d));  //截取周期内第一个字符串，计算在密钥中的下标值
        //     d++;
        //     b2 = key.indexOf(str.charAt(d));  //截取周期内第二个字符串，计算在密钥中的下标值
        //     d++;
        //     b3 = key.indexOf(str.charAt(d));  //截取周期内第三个字符串，计算在密钥中的下标值
        //     d++;
        //     s[i] = bl * l * l + b2 * l + b3  //利用下标值，反推被加密字符的Unicode编码值
        // }
        // b = eval("String.fromCharCode(" + s.join(',') + ")");//用fromCharCode()算出字符串
        // return b;  //返回被解密的字符串

        return AES.decrypt(str, key).toString(CryptoJS.enc.Utf8)
    }
}